package practice1_100;

import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.PriorityBlockingQueue;

public class Practice102 {
    public List<List<Integer>> levelOrder(TreeNode root) {
        if(root==null) return new ArrayList<>();

        Queue<TreeNode> queue=new LinkedBlockingQueue<>();
        queue.add(root);
        List<List<Integer>> list =new ArrayList<>();
        visit(queue,list);
        return  list;

    }
    //如何选择一层层来，我们遍历一层的时候，顺带开辟新的队列存储下一层的节点，这样做到遍历一层，下一层就存储完成了
    public void visit(Queue<TreeNode> queue,List<List<Integer>> list){
        Queue<TreeNode> queueNext=new LinkedBlockingQueue<>();
        List<Integer> integerList=new ArrayList<>();
        while (!queue.isEmpty()){
           TreeNode node= queue.poll();
           integerList.add(node.val);
            if(node.left!=null) queueNext.add(node.left);
            if(node.right!=null) queueNext.add(node.right);
        }
        list.add(integerList);
        if(!queueNext.isEmpty()){
            visit(queueNext,list);
        }
    }
}
